/* UNIVERSIDADE FEDERAL DE CAMPINA GRANDE - UFCG
 * Disciplina: Laboratorio de Estrutura de Dados
 * Professor: Marco Aurelio Spohn
 * Alunos: Alexandre Sales Vasconcelos       Mat.: 20621146
 * Atividade 6
 */

/**
 * Classe que implementa nos do tipo huffman.
 *
 * @version 1.0 2008/05/30
 * @author Alexandre Sales Vasconcelos
 * @see <a href="http://lab.eda.ufcg.googlepages.com/huffman"> Atividade 6 Problema 2</a>
 */
public class NodeH {
	public String character;
	private int frequency;
	private String codeWord;

	private NodeH left;
	private NodeH right;
	private NodeH next;
	private NodeH previous;
		
	/**
	 * Construtor da classe NodeH.
	 * 
	 * @param valor caracter a ser guardado
	 * @param frequencia numero de ocorrencia na string
	 */
	public NodeH(String valor, int frequencia) {
		character = valor;
		frequency = frequencia;
		codeWord = "";

		left = null;
		right = null;
		next = null;
		previous = null;
	}

	/**
	 * Metodo que retorna o frequencia
	 * 
	 * @return frequencia
	 */
	public int getFrequency() {
		return this.frequency;
	}
	
	/**
	 * Metodo que seta o valor da frequencia
	 * 
	 * @param frequency valor a ser setado
	 */
	public void setFrenquecy(int frequency) {
		this.frequency = frequency;
	}

	/**
	 * Metodo que seta o valor de codeWord
	 * 
	 * @param codeWord valor a ser setado
	 */
	public void setCodeWord(String codeWord) {
		this.codeWord = codeWord;
	}

	/**
	 * Metodo que retorna o valor de codeWord
	 * 
	 * @return retorna o codeWord
	 */
	public String getCodeWord() {
		return this.codeWord;
	}
	
	/**
	 * Metodo que seta o left
	 * 
	 * @param left valor a ser setado
	 */
	public void setLeft(NodeH left) {
		this.left = left;
	}
	
	/**
	 * Metodo que retorna o left
	 * 
	 * @return valor retornado
	 */
	public NodeH getLeft() {
		return this.left;
	}
	
	/**
	 * Metodo que retorna o right
	 * 
	 * @return valor a ser retornado
	 */
	public NodeH getRight() {
		return this.right;
	}
	
	/**
	 * Metodo que seta o right
	 * 
	 * @param right valor a ser setado
	 */
	public void setRight(NodeH right) {
		this.right = right;
	}
	
	/**
	 * Metodo que seta o next
	 * @param next
	 */
	public void setNext(NodeH next) {
		this.next = next;
	}
	
	/**
	 * Metodo que retorna o next
	 * 
	 * @return valor a ser retornado
	 */
	public NodeH getNext() {
		return this.next;
	}
	
	/**
	 * Metodo que seta o previous
	 * 
	 * @param previous valor a ser setado
	 */
	public void setPrevious(NodeH previous) {
		this.previous = previous;
	}
	
	/**
	 * Metodo que retorna o previous
	 * 
	 * @return valor a ser retornado
	 */
	public NodeH getPrevious() {
		return this.previous;
	}
}
